Rigid body simulations are a class of computations in which the motion of rigid objects is simulated. Newtonian mechanics may be used to determine the motion of objects. The objects may interact with each other or with boundaries such that the position and momentum of the objects changes during the simulation. For example, rigid bodies may collide with each other and change their direction and velocity. As other examples, in classical physics, objects may interact with each other due to gravitational or electrostatic forces.
FIG. 1 illustrates a prior art computing system for performing rigid body simulations. A rigid body simulation program 110 is stored on a computer memory. The rigid body simulation executes on a central processing unit (CPU) 105. The position and orientation of each object is traditionally represented by matrices, such as 4×4 matrices, to represent position and orientation. A matrix transformation is performed to calculate changes in position and orientation of an object. Consequently, the rigid body simulation program 110 typically includes a module 115 for performing transformation matrix calculations on CPU 105.
In many applications it is desirable to generate a graphical representation of the rigid body simulation on a display screen. Consequently, the CPU may generate graphics commands providing position and orientation information that are provided to a graphics processing unit (GPU) 120 to render the results of the rigid body simulation into images.
One drawback of prior art systems for performing rigid body simulations is the difficulty associated with performing rigid body simulations on a large number of objects. Significant CPU computing resources are required to compute the transformation matrices, particularly as the number of objects increases. In addition, significant bandwidth is consumed by transmitting the transformation data from the CPU to the GPU every frame.
Therefore, what is desired is an improved apparatus, system, and method for calculating position and orientation of objects in a rigid body simulation.